package br.upis.criacional.factory.method.Montadora.Singleton;

import java.util.ArrayList;
import java.util.List;

import br.upis.criacional.factory.method.Montadora.Abstrato.FabricaDeAcessorios;
import br.upis.criacional.factory.method.Montadora.Enum.Fabricantes;
import br.upis.criacional.factory.method.Montadora.Fabrica.FabricanteBantec;
import br.upis.criacional.factory.method.Montadora.Fabrica.FabricanteFiat;
import br.upis.criacional.factory.method.Montadora.Fabrica.FabricanteMichelin;
import br.upis.criacional.factory.method.Montadora.Fabrica.FabricanteOrgus;
import br.upis.criacional.factory.method.Montadora.Fabrica.FabricanteVision;

public class ConfiguraFabrica {

	private static ConfiguraFabrica uniqueInstance;
	
	private ConfiguraFabrica(){}
	
	public static synchronized ConfiguraFabrica getInstance(){
		if (uniqueInstance == null){
			uniqueInstance = new ConfiguraFabrica();
		}
		return uniqueInstance;
	}
	
	public static FabricaDeAcessorios definirFabrica(Fabricantes fabricantes){
		FabricaDeAcessorios fab = null;
		switch (fabricantes){
			case BANTEC:
				fab = new FabricanteBantec();
				break;
			case FIAT:
				fab = new FabricanteFiat();
				break;
			case MICHELIN:
				fab = new FabricanteMichelin();
				break;
			case ORGUS:
				fab = new FabricanteOrgus();
				break;
			case VISION:
				fab = new FabricanteVision();
				break;
		}
		return fab;
	}
	
	public static Object[] buscaFabricaDeAcessorios(String acessorio){
		List<Object> fabricaList = new ArrayList<Object>();
		
		for (Fabricantes f : Fabricantes.values()){
			FabricaDeAcessorios fab = definirFabrica(f);
			if (fab.confirmaProducao(acessorio)){
				fabricaList.add(f.toString());
			}
		}
		
		return fabricaList.toArray();
	}
}
